# 定时删除原始数据 三种方式

# ------------------------------------- -mtime 超过 x 天（≥24*x 小时）会有 天数取整 影响----------------------------------

#!/bin/bash
# 定时删除原始数据
DAYS_TO_KEEP=1  # 保留2天的数据 -mtime +1 表示 超过 1 天（≥48 小时）
LOG_DIR="/opt/docker_daq/raw"
LOG_FILE="/opt/docker_daq/logs/cleanup.log"

# 1. 统计待删除文件的大小和数量
TOTAL_SIZE=$(find "$LOG_DIR" -type f -mtime +${DAYS_TO_KEEP} -name "*.json" -printf "%s\n" | awk '{sum+=$1} END {print sum/1024/1024 " MB"}')
FILE_COUNT=$(find "$LOG_DIR" -type f -mtime +${DAYS_TO_KEEP} -name "*.json" | wc -l)

# 2. 执行删除（保留操作记录）
DELETED_FILES=$(find "$LOG_DIR" -type f -mtime +${DAYS_TO_KEEP} -name "*.json" -delete -printf "已删除: %f\n" | wc -l)
#DELETED_FILES=$(find "$LOG_DIR" -type f -mtime +${DAYS_TO_KEEP} -name "*.json" -exec rm -vf {} \; | wc -l)
DELETED_DIRS=$(find "$LOG_DIR" -depth -type d -empty -exec rmdir -v {} \; | wc -l)

# 3. 记录详细日志
{
    echo "===== $(date '+%Y-%m-%d %H:%M:%S') ====="
    echo "待删除文件数: $FILE_COUNT"
    echo "待删除文件总大小: $TOTAL_SIZE"
    echo "实际删除文件数: $DELETED_FILES"
    echo "实际删除空目录数: $DELETED_DIRS"
    echo "----------------------------------------"
} | tee -a "$LOG_FILE"


# ------------------------------------- -mmin 超过 x 分钟 精确到分钟级---------------------------------------------------

#!/bin/bash
# 定时删除原始数据（按小时精确删除）
HOURS_TO_KEEP=48  # 保留48小时（2天）的数据
MINUTES_TO_KEEP=$((HOURS_TO_KEEP * 60))  # 转换为分钟
LOG_DIR="/opt/docker_daq/raw"
LOG_FILE="/opt/docker_daq/logs/cleanup.log"

# 计算待删除文件的总大小（MB）
TOTAL_SIZE=$(find "$LOG_DIR" -type f -mmin +${MINUTES_TO_KEEP} -name "*.json" -printf "%s\n" | awk '{sum+=$1} END {print sum/1024/1024 " MB"}')

# 计算待删除文件数量
FILE_COUNT=$(find "$LOG_DIR" -type f -mmin +${MINUTES_TO_KEEP} -name "*.json" | wc -l)

# 执行删除并记录删除数量
DELETED_FILES=$(find "$LOG_DIR" -type f -mmin +${MINUTES_TO_KEEP} -name "*.json" -delete -printf "已删除: %f\n" | wc -l)

# 删除空目录
DELETED_DIRS=$(find "$LOG_DIR" -depth -type d -empty -exec rmdir -v {} \; | wc -l)

# 记录日志
{
    echo "===== $(date '+%Y-%m-%d %H:%M:%S') ====="
    echo "保留时间: ${HOURS_TO_KEEP} 小时（${MINUTES_TO_KEEP} 分钟）"
    echo "待删除文件数: $FILE_COUNT"
    echo "待删除文件总大小: $TOTAL_SIZE"
    echo "实际删除文件数: $DELETED_FILES"
    echo "实际删除空目录数: $DELETED_DIRS"
    echo "----------------------------------------"
} | tee -a "$LOG_FILE"

# ------------------------------------- -newermt 精确到秒级--------------------------------------------------------------

#!/bin/bash
# 定时删除原始数据（精确到秒级）
HOURS_TO_KEEP=48  # 保留48小时（2天）的数据
LOG_DIR="/opt/docker_daq/raw"
LOG_FILE="/opt/docker_daq/logs/cleanup.log"

# 计算时间阈值（当前时间 - HOURS_TO_KEEP）
CUTOFF_TIME=$(date -d "${HOURS_TO_KEEP} hours ago" +"%Y-%m-%d %H:%M:%S")

# 统计待删除文件信息
TOTAL_SIZE=$(find "$LOG_DIR" -type f ! -newermt "$CUTOFF_TIME" -name "*.json" -printf "%s\n" | awk '{sum+=$1} END {print sum/1024/1024 " MB"}')
FILE_COUNT=$(find "$LOG_DIR" -type f ! -newermt "$CUTOFF_TIME" -name "*.json" | wc -l)

# 执行删除并记录
DELETED_FILES=$(find "$LOG_DIR" -type f ! -newermt "$CUTOFF_TIME" -name "*.json" -delete -printf "已删除: %f\n" | wc -l)
DELETED_DIRS=$(find "$LOG_DIR" -depth -type d -empty -exec rmdir -v {} \; | wc -l)

# 记录日志
{
    echo "===== $(date '+%Y-%m-%d %H:%M:%S') ====="
    echo "保留时间阈值: ${HOURS_TO_KEEP} 小时（删除早于 ${CUTOFF_TIME} 的文件）"
    echo "待删除文件数: $FILE_COUNT"
    echo "待删除文件总大小: $TOTAL_SIZE"
    echo "实际删除文件数: $DELETED_FILES"
    echo "实际删除空目录数: $DELETED_DIRS"
    echo "----------------------------------------"
} | tee -a "$LOG_FILE"


# ----------------------------------------------------------------------------------------------------------------

# {} + 会将匹配到的所有文件路径一次性传递给 rm 命令，形成类似 rm -f file1 file2 file3 的批量处理
# {} \; 会对每个文件单独调用 rm 命令（例如 rm -vf file1，rm -vf file2，...）

# 删除空目录
find -mtime +2 是基于 文件的修改时间（mtime） 计算的，而不是文件创建时间或访问时间

# -mtime +n 的计算规则：

+n 表示 超过 n 个完整的 24 小时周期（即 n+1 天前）。
-n 表示 n 天内（即 <=n 天）。
n 表示 正好 n 天前（即 [n, n+1) 天前）。

-mtime +1 表示 超过 1 天（即 ≥2 天前）
4月1日运行时，会匹配 3月29日 23:59:59 及之前 的文件。

# 查看某文件的修改时间
stat /opt/docker_daq/raw/某个文件.json

# 删除 30 天前的 JSON 文件
#find "$LOG_DIR" -type f -mtime +30 -name "*.json" -exec rm -f {} +
# 删除嵌套的空目录
#find "$LOG_DIR" -depth -type d -empty -exec rmdir {} +
# 可选：记录日志
#echo "$(date) - Cleanup completed" >> "$LOG_FILE"

# 查看文件清单
find "/opt/docker_daq/raw" -type f -mtime +30 -name "*.json" -exec ls -lh {} +

# 增加文件权限
chmod +x cleanup_raw.sh

# 增加定时任务
crontab -e

# 每天0点执行一次
0 0 * * * /opt/docker_daq/cleanup_raw.sh